/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bean;

import java.io.File;
import java.net.URL;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.ServletContext;
import negocio.GestorFotosLocal;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */

public class FotoBean {

    //Uso la interfaz local del EJB porque con la remota pierde información de la imagen. (Llega imagen toda negra)
    @EJB (beanName="GestorFotosBean")
    private GestorFotosLocal gestorFotosBean;
    private int id;
    private String ruta;
    private String rutaThumbnail;
    private String descripcion;
    private Date fechaFoto;
    private String nombreFoto;
    private int idObra;
    private int idEmpresaContratista;
    private String nombreObra;
    private String codigoObra;
    private Date fechaInicioObra;
    private Date fechaFinObra;
    private String montoObra;
    private String estadoObra;
    private String nombreEmpresaContratista;


    static Logger logger = Logger.getLogger(FotoBean.class);

    private static void log4jArchivo(Exception e) {

         /**
         * Primero obtenemos la url del archivo de configuración,
         * como están en el mismo paquete que la clase Main lo podemos obtener con el método getResource().
         */
        URL url = FotoBean.class.getResource("/configuracion/log4j.properties");
        /**
         * Despues cargamos el archivo de configuración
         */
        PropertyConfigurator.configure(url);
        logger.error(e);

    }

    /** Creates a new instance of FotoBean */
    public FotoBean() {
    }

    /**
     *
     * @param e
     */
    public void verSoloFotosOyente(ActionEvent e){
        UIParameter component = (UIParameter) e.getComponent().findComponent("idFotos");
        this.setIdObra((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("idEmpresaVerFotos");
        this.setIdEmpresaContratista((Integer) Integer.parseInt(component.getValue().toString()));
        component = (UIParameter) e.getComponent().findComponent("nombreObraVerFotos");
        this.setNombreObra(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("nombreEmpresaVerFotos");
        this.setNombreEmpresaContratista(component.getValue().toString());
        component = (UIParameter) e.getComponent().findComponent("fechaInicioObraVerFotos");
        if(component.getValue()!=null)this.setFechaInicioObra((Date)component.getValue());
        else this.setFechaInicioObra(null);
        component = (UIParameter) e.getComponent().findComponent("fechaFinObraVerFotos");
        if(component.getValue()!=null)this.setFechaFinObra((Date)component.getValue());
        else this.setFechaFinObra(null);
        component = (UIParameter) e.getComponent().findComponent("codigoObraVerFotos");
        if(component.getValue()!=null)this.setCodigoObra(component.getValue().toString());
        else this.setCodigoObra("");
        component = (UIParameter) e.getComponent().findComponent("montoObraVerFotos");
        if(component.getValue()!=null)this.setMontoObra(component.getValue().toString());
        else this.setMontoObra("");
        component = (UIParameter) e.getComponent().findComponent("estadoObraVerFotos");
        if(component.getValue()!=null)this.setEstadoObra(component.getValue().toString());
        else this.setEstadoObra("");
    }

    /**
     *
     * @param event
     */
    public void subirFotoOyente(UploadEvent event) {
        try {
            UploadItem item = event.getUploadItem();
            ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
            String pathReal=(String) servletContext.getRealPath("/images/fotos");
            File ffotos = new File(pathReal);
            this.gestorFotosBean.subirFoto(ffotos, item.getFile(), this.idObra);
        } catch (Exception ex) {
           FotoBean.log4jArchivo(ex);
        }
    }

    /**
     *
     * @param e
     */
    public void eliminarFotoOyente(ActionEvent e){
        UIParameter component = (UIParameter) e.getComponent().findComponent("idFoto");
        this.setId((Integer) Integer.parseInt(component.getValue().toString()));
    }

    /**
     *
     * @return
     */
    public String eliminarFoto(){
        FacesContext context = FacesContext.getCurrentInstance();
        ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
        String pathReal=(String) servletContext.getRealPath("/images/fotos");
        File ffotos = new File(pathReal);
        if(this.gestorFotosBean.eliminarFoto(ffotos, this.id)){
            context.addMessage(null, new FacesMessage("Foto eliminada con exito", ""));
        }else {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No puede eliminar esa Foto porque ocurrio un error al leer el archivo", ""));
        }
        return null;
    }

    /**
     *
     * @param e
     */
    public void actualizarDescripcionFotoOyente(ActionEvent e){
       UIParameter component = (UIParameter) e.getComponent().findComponent("idFotoModi");
       this.setId((Integer) Integer.parseInt(component.getValue().toString()));
       component = (UIParameter) e.getComponent().findComponent("descripcionFotoModi");
       if(component.getValue()!=null)this.setDescripcion(component.getValue().toString());
       else this.setDescripcion("");
       component = (UIParameter) e.getComponent().findComponent("fechaFotoModi");
       this.setFechaFoto((Date)component.getValue());
       component = (UIParameter) e.getComponent().findComponent("nombreFotoModi");
       this.setNombreFoto(component.getValue().toString());
       component = (UIParameter) e.getComponent().findComponent("rutaThumbnailFotoModi");
       this.setRutaThumbnail(component.getValue().toString());
    }

    /**
     *
     * @return
     */
    public String actualizarDescripcionFoto(){
        FacesContext context = FacesContext.getCurrentInstance();
        if(this.gestorFotosBean.modificarDescripcionFoto(this.id, this.descripcion.toUpperCase())){
            context.addMessage(null, new FacesMessage("Comentario actualizado con exito", ""));
        }else {
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No puede actualizar el comentario porque ocurrio un error en la BD", ""));
        }
        return null;
    }

    /**
     *
     * @return
     */
    public List getFotos(){
        return this.gestorFotosBean.fotosPorObra(this.idObra);
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the ruta
     */
    public String getRuta() {
        return ruta;
    }

    /**
     * @param ruta the ruta to set
     */
    public void setRuta(String ruta) {
        this.ruta = ruta;
    }

    /**
     * @return the idObra
     */
    public int getIdObra() {
        return idObra;
    }

    /**
     * @param idObra the idObra to set
     */
    public void setIdObra(int idObra) {
        this.idObra = idObra;
    }

    /**
     * @return the rutaThumbnail
     */
    public String getRutaThumbnail() {
        return rutaThumbnail;
    }

    /**
     * @param rutaThumbnail the rutaThumbnail to set
     */
    public void setRutaThumbnail(String rutaThumbnail) {
        this.rutaThumbnail = rutaThumbnail;
    }

    /**
     * @return the nombreObra
     */
    public String getNombreObra() {
        return nombreObra;
    }

    /**
     * @param nombreObra the nombreObra to set
     */
    public void setNombreObra(String nombreObra) {
        this.nombreObra = nombreObra;
    }

    /**
     * @return the codigoObra
     */
    public String getCodigoObra() {
        return codigoObra;
    }

    /**
     * @param codigoObra the codigoObra to set
     */
    public void setCodigoObra(String codigoObra) {
        this.codigoObra = codigoObra;
    }

    /**
     * @return the fechaInicioObra
     */
    public Date getFechaInicioObra() {
        return fechaInicioObra;
    }

    /**
     * @param fechaInicioObra the fechaInicioObra to set
     */
    public void setFechaInicioObra(Date fechaInicioObra) {
        this.fechaInicioObra = fechaInicioObra;
    }

    /**
     * @return the fechaFinObra
     */
    public Date getFechaFinObra() {
        return fechaFinObra;
    }

    /**
     * @param fechaFinObra the fechaFinObra to set
     */
    public void setFechaFinObra(Date fechaFinObra) {
        this.fechaFinObra = fechaFinObra;
    }

    /**
     * @return the montoObra
     */
    public String getMontoObra() {
        return montoObra;
    }

    /**
     * @param montoObra the montoObra to set
     */
    public void setMontoObra(String montoObra) {
        this.montoObra = montoObra;
    }

    /**
     * @return the estadoObra
     */
    public String getEstadoObra() {
        return estadoObra;
    }

    /**
     * @param estadoObra the estadoObra to set
     */
    public void setEstadoObra(String estadoObra) {
        this.estadoObra = estadoObra;
    }

    /**
     * @return the nombreEmpresaContratista
     */
    public String getNombreEmpresaContratista() {
        return nombreEmpresaContratista;
    }

    /**
     * @param nombreEmpresaContratista the nombreEmpresaContratista to set
     */
    public void setNombreEmpresaContratista(String nombreEmpresaContratista) {
        this.nombreEmpresaContratista = nombreEmpresaContratista;
    }

    /**
     * @return the idEmpresaContratista
     */
    public int getIdEmpresaContratista() {
        return idEmpresaContratista;
    }

    /**
     * @param idEmpresaContratista the idEmpresaContratista to set
     */
    public void setIdEmpresaContratista(int idEmpresaContratista) {
        this.idEmpresaContratista = idEmpresaContratista;
    }

    /**
     * @return the descripcion
     */
    public String getDescripcion() {
        return descripcion;
    }

    /**
     * @param descripcion the descripcion to set
     */
    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    /**
     * @return the fechaFoto
     */
    public Date getFechaFoto() {
        return fechaFoto;
    }

    /**
     * @param fechaFoto the fechaFoto to set
     */
    public void setFechaFoto(Date fechaFoto) {
        this.fechaFoto = fechaFoto;
    }

    /**
     * @return the nombreFoto
     */
    public String getNombreFoto() {
        return nombreFoto;
    }

    /**
     * @param nombreFoto the nombreFoto to set
     */
    public void setNombreFoto(String nombreFoto) {
        this.nombreFoto = nombreFoto;
    }


}